package com.atguigu.cloud.resp;

import lombok.Data;
import lombok.experimental.Accessors;

/**
 *用于生成流式 API（也称为链式调用）的 setter 方法。使用这个注解后，生成的 setter
 * 方法会返回当前对象实例，而不是 void，从而允许多个 setter 方法连续调用，从而实现链式编程风格。
 * User user = new User()
 *         .setName("John")
 *         .setAge(30);链式调用
 **/
@Data
@Accessors(chain = true)
public class ResultData<T> {

    private String code;
    private String message;
    private T data;

    private long timestamp;

    public ResultData() {
        //每次构造方法时候的时间戳
        this.timestamp=System.currentTimeMillis();
    }
    //静态工厂方法

    /**
     * 创建一个泛型方法 success，
     * 它接受一个类型为 T 的数据，并返回一个包含该数据的 ResultData<T> 对象
     * @param data
     * @return
     * @param <T>
     */
    public static <T> ResultData<T> success(T data){
        //构造自动有时间戳
        ResultData resultData = new ResultData<>();
        resultData.setCode(ReturnCodeEnum.RC200.getCode());
        resultData.setMessage(ReturnCodeEnum.RC200.getMessage());
        resultData.setData(data);
        return resultData;
    }
    public static <T> ResultData<T> fail(String code,String message){
        //构造自动有时间戳
        ResultData resultData = new ResultData<>();
        resultData.setCode(code);
        resultData.setMessage(message);
        resultData.setData(null);
        return resultData;
    }
}
